package com.bonc.tools;

import org.apache.log4j.Logger;
import java.io.*;
import java.util.zip.GZIPOutputStream;

/**
 * Created by zhangxinsong on 2019-04-02.
 */
public class GZIPcompress {
    private static final Logger logger = Logger.getLogger(GZIPcompress.class);
    public static void compress(String src,String dest) throws IOException {
//        String src = "D:\\江西\\新建文件夹\\nowx_20190321120000_4200000.txt";
//        String dest = "D:\\江西\\新建文件夹\\bak\\nowx_20190321120000_4200000.txt.gz";
        //做准备压缩一个字符文件，注，这里的字符文件要是GBK编码方式的
        BufferedReader in = new BufferedReader(new FileReader(src));
        //使用GZIPOutputStream包装OutputStream流，使其具体压缩特性，最后会生成test.txt.gz压缩包
        //并且里面有一个名为test.txt的文件
        BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream(
                new FileOutputStream(dest)));
        logger.info("开始写压缩文件...");
        int c;
        while ((c = in.read()) != -1) {

            /*
             * 注，这里是压缩一个字符文件，前面是以字符流来读的，不能直接存入c，因为c已是Unicode
             * 码，这样会丢掉信息的（当然本身编码格式就不对），所以这里要以GBK来解后再存入。
             */
            out.write(String.valueOf((char)c).getBytes("utf-8"));
        }
        in.close();
        out.close();
    }
}
